Extracción, Limpieza y Transformación de los Datos (ETL)
4.1 Carga de los datos 4.2 Identificación de las Columnas 4.3 Unión de los DataFrames 4.4 Manejo de Valores Nulos 4.5 Resumen estadístico
5.1 Relación Familia y Salud (Gráfica) 5.2 Relación Felicidad y Confianza (Gráfica) 5.3 Matriz de Correlación 5.4 Agrupar por País (Máximo Felicidad) 5.5 Relación Felicidad y Generosidad (Gráfica) 5.6 Distribución del Grado de Distopía por Región
Este proyecto se enmarca dentro del Módulo 1 del curso y se trata de un ejercicio práctico que tiene como objetivo aplicar los conocimientos adquiridos en el primer módulo del curso. El proyecto se basa en la exploración y análisis de datos del "Informe Mundial de la Felicidad" correspondiente a los años 2015 y 2016.
Los objetivos principales de este proyecto son los siguientes:
El objetivo de este análisis de datos es utilizar la información contenida en el conjunto de datos del "Informe Mundial de la Felicidad" de los años 2015 y 2016 para comprender y explorar los patrones y las tendencias relacionadas con la felicidad a nivel global. Se busca identificar posibles correlaciones entre los factores clave que influyen en la felicidad de las personas y evaluar si existen diferencias significativas entre los años 2015 y 2016 en términos de puntuaciones de felicidad y factores asociados.
El conjunto de datos del "Informe Mundial de la Felicidad" contiene información detallada sobre la evaluación de la vida y diversos factores que contribuyen a la felicidad en múltiples países. Estos datos se obtuvieron a través de la encuesta mundial Gallup y se basan en las respuestas de los encuestados a la pregunta principal de evaluación de la vida, que utiliza una escala del 0 al 10 para calificar la satisfacción con la vida. Además de las puntuaciones de felicidad, el conjunto de datos incluye información sobre los siguientes factores clave:
Estos factores se utilizan para estimar el grado en que contribuyen a la felicidad de los individuos en cada país. Además, se compara el desempeño de cada país con una "distopía" hipotética que representa el escenario menos feliz en términos de estos factores.
En el análisis de datos del "Informe Mundial de la Felicidad" correspondiente a los años 2015 y 2016, se llevará a cabo una serie de pasos clave utilizando herramientas como pandas, numpy, matplotlib, seaborn y plotly. Estos pasos incluyen la carga y preparación de los datos, la exploración de tendencias y patrones, la identificación de correlaciones entre variables y la visualización de resultados a través de gráficos. El objetivo es comprender mejor la relación entre la felicidad y los factores socioeconómicos y culturales, así como evaluar posibles diferencias entre los dos años estudiados. Este análisis proporcionará una visión más profunda de la felicidad a nivel global y su influencia en la toma de decisiones políticas y de bienestar.
import pandas as pd
import seaborn as sns
import numpy as np
!pip install plotly
import plotly.express as px
import plotly.graph_objs as go
Requirement already satisfied: plotly in c:\users\jtroc\anaconda3\lib\site-packages (5.9.0) Requirement already satisfied: tenacity>=6.2.0 in c:\users\jtroc\anaconda3\lib\site-packages (from plotly) (8.0.1)
df_2015 = pd.read_csv("2015.csv")
df_2016 = pd.read_csv("2016.csv")
pd.set_option('display.max_columns', 500)
df_2015.head()
| Country | Region | Happiness Rank | Happiness Score | Standard Error | Economy (GDP per Capita) | Family | Health (Life Expectancy) | Freedom | Trust (Government Corruption) | Generosity | Dystopia Residual | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Switzerland | Western Europe | 1 | 7.587 | 0.03411 | 1.39651 | 1.34951 | 0.94143 | 0.66557 | 0.41978 | 0.29678 | 2.51738 |
| 1 | Iceland | Western Europe | 2 | 7.561 | 0.04884 | 1.30232 | 1.40223 | 0.94784 | 0.62877 | 0.14145 | 0.43630 | 2.70201 |
| 2 | Denmark | Western Europe | 3 | 7.527 | 0.03328 | 1.32548 | 1.36058 | 0.87464 | 0.64938 | 0.48357 | 0.34139 | 2.49204 |
| 3 | Norway | Western Europe | 4 | 7.522 | 0.03880 | 1.45900 | 1.33095 | 0.88521 | 0.66973 | 0.36503 | 0.34699 | 2.46531 |
| 4 | Canada | North America | 5 | 7.427 | 0.03553 | 1.32629 | 1.32261 | 0.90563 | 0.63297 | 0.32957 | 0.45811 | 2.45176 |
df_2016.head()
| Country | Region | Happiness Rank | Happiness Score | Lower Confidence Interval | Upper Confidence Interval | Economy (GDP per Capita) | Family | Health (Life Expectancy) | Freedom | Trust (Government Corruption) | Generosity | Dystopia Residual | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Denmark | Western Europe | 1 | 7.526 | 7.460 | 7.592 | 1.44178 | 1.16374 | 0.79504 | 0.57941 | 0.44453 | 0.36171 | 2.73939 |
| 1 | Switzerland | Western Europe | 2 | 7.509 | 7.428 | 7.590 | 1.52733 | 1.14524 | 0.86303 | 0.58557 | 0.41203 | 0.28083 | 2.69463 |
| 2 | Iceland | Western Europe | 3 | 7.501 | 7.333 | 7.669 | 1.42666 | 1.18326 | 0.86733 | 0.56624 | 0.14975 | 0.47678 | 2.83137 |
| 3 | Norway | Western Europe | 4 | 7.498 | 7.421 | 7.575 | 1.57744 | 1.12690 | 0.79579 | 0.59609 | 0.35776 | 0.37895 | 2.66465 |
| 4 | Finland | Western Europe | 5 | 7.413 | 7.351 | 7.475 | 1.40598 | 1.13464 | 0.81091 | 0.57104 | 0.41004 | 0.25492 | 2.82596 |
df_2015.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 158 entries, 0 to 157 Data columns (total 12 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Country 158 non-null object 1 Region 158 non-null object 2 Happiness Rank 158 non-null int64 3 Happiness Score 158 non-null float64 4 Standard Error 158 non-null float64 5 Economy (GDP per Capita) 158 non-null float64 6 Family 158 non-null float64 7 Health (Life Expectancy) 158 non-null float64 8 Freedom 158 non-null float64 9 Trust (Government Corruption) 158 non-null float64 10 Generosity 158 non-null float64 11 Dystopia Residual 158 non-null float64 dtypes: float64(9), int64(1), object(2) memory usage: 14.9+ KB
df_2016.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 157 entries, 0 to 156 Data columns (total 13 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Country 157 non-null object 1 Region 157 non-null object 2 Happiness Rank 157 non-null int64 3 Happiness Score 157 non-null float64 4 Lower Confidence Interval 157 non-null float64 5 Upper Confidence Interval 157 non-null float64 6 Economy (GDP per Capita) 157 non-null float64 7 Family 157 non-null float64 8 Health (Life Expectancy) 157 non-null float64 9 Freedom 157 non-null float64 10 Trust (Government Corruption) 157 non-null float64 11 Generosity 157 non-null float64 12 Dystopia Residual 157 non-null float64 dtypes: float64(10), int64(1), object(2) memory usage: 16.1+ KB
# Identificación de columnas
columnas_2015 = df_2015.columns
columnas_2016 = df_2016.columns
# Comparación de columnas
diferencias = set(columnas_2015) - set(columnas_2016)
print("Columnas en el dataset de 2015:", columnas_2015)
print("\nColumnas en el dataset de 2016:", columnas_2016)
print("\nDiferencias entre los datasets:", diferencias)
Columnas en el dataset de 2015: Index(['Country', 'Region', 'Happiness Rank', 'Happiness Score',
'Standard Error', 'Economy (GDP per Capita)', 'Family',
'Health (Life Expectancy)', 'Freedom', 'Trust (Government Corruption)',
'Generosity', 'Dystopia Residual'],
dtype='object')
Columnas en el dataset de 2016: Index(['Country', 'Region', 'Happiness Rank', 'Happiness Score',
'Lower Confidence Interval', 'Upper Confidence Interval',
'Economy (GDP per Capita)', 'Family', 'Health (Life Expectancy)',
'Freedom', 'Trust (Government Corruption)', 'Generosity',
'Dystopia Residual'],
dtype='object')
Diferencias entre los datasets: {'Standard Error'}
diferencias2015 = df_2015.columns.difference(df_2016.columns)
diferencias2016 = df_2016.columns.difference(df_2015.columns)
print("Diferencias entre los datasets:", diferencias2015)
print("Diferencias entre los datasets:", diferencias2016)
Diferencias entre los datasets: Index(['Standard Error'], dtype='object') Diferencias entre los datasets: Index(['Lower Confidence Interval', 'Upper Confidence Interval'], dtype='object')
Al comparar los datasets correspondientes a los años 2015 y 2016 del "Informe Mundial de la Felicidad", se identificaron diferencias significativas en las columnas de datos. Estas diferencias son las siguientes:
En el dataset de 2015:
Se encuentra la columna 'Standard Error', que no está presente en el dataset de 2016. Por otro lado, en el dataset de 2016:
Se encuentran las columnas 'Lower Confidence Interval' y 'Upper Confidence Interval', las cuales no están presentes en el dataset de 2015.
# Agregar una columna 'Año' a cada DataFrame
df_2015['Año'] = 2015
df_2016['Año'] = 2016
# inner join utilizando la columna "Country" como key
df = pd.concat([df_2015, df_2016], ignore_index=True)
df.head()
| Country | Region | Happiness Rank | Happiness Score | Standard Error | Economy (GDP per Capita) | Family | Health (Life Expectancy) | Freedom | Trust (Government Corruption) | Generosity | Dystopia Residual | Año | Lower Confidence Interval | Upper Confidence Interval | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Switzerland | Western Europe | 1 | 7.587 | 0.03411 | 1.39651 | 1.34951 | 0.94143 | 0.66557 | 0.41978 | 0.29678 | 2.51738 | 2015 | NaN | NaN |
| 1 | Iceland | Western Europe | 2 | 7.561 | 0.04884 | 1.30232 | 1.40223 | 0.94784 | 0.62877 | 0.14145 | 0.43630 | 2.70201 | 2015 | NaN | NaN |
| 2 | Denmark | Western Europe | 3 | 7.527 | 0.03328 | 1.32548 | 1.36058 | 0.87464 | 0.64938 | 0.48357 | 0.34139 | 2.49204 | 2015 | NaN | NaN |
| 3 | Norway | Western Europe | 4 | 7.522 | 0.03880 | 1.45900 | 1.33095 | 0.88521 | 0.66973 | 0.36503 | 0.34699 | 2.46531 | 2015 | NaN | NaN |
| 4 | Canada | North America | 5 | 7.427 | 0.03553 | 1.32629 | 1.32261 | 0.90563 | 0.63297 | 0.32957 | 0.45811 | 2.45176 | 2015 | NaN | NaN |
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 315 entries, 0 to 314 Data columns (total 15 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Country 315 non-null object 1 Region 315 non-null object 2 Happiness Rank 315 non-null int64 3 Happiness Score 315 non-null float64 4 Standard Error 158 non-null float64 5 Economy (GDP per Capita) 315 non-null float64 6 Family 315 non-null float64 7 Health (Life Expectancy) 315 non-null float64 8 Freedom 315 non-null float64 9 Trust (Government Corruption) 315 non-null float64 10 Generosity 315 non-null float64 11 Dystopia Residual 315 non-null float64 12 Año 315 non-null int64 13 Lower Confidence Interval 157 non-null float64 14 Upper Confidence Interval 157 non-null float64 dtypes: float64(11), int64(2), object(2) memory usage: 37.0+ KB
df.describe()
| Happiness Rank | Happiness Score | Standard Error | Economy (GDP per Capita) | Family | Health (Life Expectancy) | Freedom | Trust (Government Corruption) | Generosity | Dystopia Residual | Año | Lower Confidence Interval | Upper Confidence Interval | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 315.000000 | 315.000000 | 158.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 157.000000 | 157.000000 |
| mean | 79.238095 | 5.378949 | 0.047885 | 0.899837 | 0.892647 | 0.594054 | 0.399896 | 0.140532 | 0.239957 | 2.212032 | 2015.498413 | 5.282395 | 5.481975 |
| std | 45.538922 | 1.141531 | 0.017146 | 0.410780 | 0.286718 | 0.240790 | 0.150684 | 0.115490 | 0.130077 | 0.558728 | 0.500793 | 1.148043 | 1.136493 |
| min | 1.000000 | 2.839000 | 0.018480 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.328580 | 2015.000000 | 2.732000 | 3.078000 |
| 25% | 40.000000 | 4.510000 | 0.037268 | 0.594900 | 0.739880 | 0.419645 | 0.295890 | 0.061315 | 0.151430 | 1.884135 | 2015.000000 | 4.327000 | 4.465000 |
| 50% | 79.000000 | 5.286000 | 0.043940 | 0.973060 | 0.937930 | 0.640450 | 0.413190 | 0.106130 | 0.218540 | 2.211260 | 2015.000000 | 5.237000 | 5.419000 |
| 75% | 118.500000 | 6.269000 | 0.052300 | 1.229000 | 1.087360 | 0.787640 | 0.516730 | 0.178610 | 0.311450 | 2.563470 | 2016.000000 | 6.154000 | 6.434000 |
| max | 158.000000 | 7.587000 | 0.136930 | 1.824270 | 1.402230 | 1.025250 | 0.669730 | 0.551910 | 0.819710 | 3.837720 | 2016.000000 | 7.460000 | 7.669000 |
valores_nulos = df.isnull().sum()
# Calcular el porcentaje de valores nulos en cada columna
porcentaje_nulos = (valores_nulos / len(df)) * 100
# Crear un DataFrame para mostrar los resultados
info_nulos = pd.DataFrame({'Valores Nulos': valores_nulos, 'Porcentaje de Nulos': porcentaje_nulos})
# Mostrar la información de valores nulos
print(info_nulos)
Valores Nulos Porcentaje de Nulos Country 0 0.00000 Region 0 0.00000 Happiness Rank 0 0.00000 Happiness Score 0 0.00000 Standard Error 157 49.84127 Economy (GDP per Capita) 0 0.00000 Family 0 0.00000 Health (Life Expectancy) 0 0.00000 Freedom 0 0.00000 Trust (Government Corruption) 0 0.00000 Generosity 0 0.00000 Dystopia Residual 0 0.00000 Año 0 0.00000 Lower Confidence Interval 158 50.15873 Upper Confidence Interval 158 50.15873
# Calcular los valores mínimos y máximos de las columnas
min_lower_confidence = df['Lower Confidence Interval'].min()
max_lower_confidence = df['Lower Confidence Interval'].max()
min_upper_confidence = df['Upper Confidence Interval'].min()
max_upper_confidence = df['Upper Confidence Interval'].max()
# Reemplazar valores nulos en "Lower Confidence Interval" y "Upper Confidence Interval" con números aleatorios
df['Lower Confidence Interval'].fillna(np.random.uniform(min_lower_confidence, max_lower_confidence), inplace=True)
df['Upper Confidence Interval'].fillna(np.random.uniform(min_upper_confidence, max_upper_confidence), inplace=True)
# Reemplazar valores nulos en "Standard Error" con la media al cuadrado
mean_standard_error = df['Standard Error'].mean()
df['Standard Error'].fillna(mean_standard_error**2, inplace=True)
valores_nulos = df.isnull().sum()
# Calcular el porcentaje de valores nulos en cada columna
porcentaje_nulos = (valores_nulos / len(df)) * 100
# Crear un DataFrame para mostrar los resultados
info_nulos = pd.DataFrame({'Valores Nulos': valores_nulos, 'Porcentaje de Nulos': porcentaje_nulos})
# Mostrar la información de valores nulos
print(info_nulos)
Valores Nulos Porcentaje de Nulos Country 0 0.0 Region 0 0.0 Happiness Rank 0 0.0 Happiness Score 0 0.0 Standard Error 0 0.0 Economy (GDP per Capita) 0 0.0 Family 0 0.0 Health (Life Expectancy) 0 0.0 Freedom 0 0.0 Trust (Government Corruption) 0 0.0 Generosity 0 0.0 Dystopia Residual 0 0.0 Año 0 0.0 Lower Confidence Interval 0 0.0 Upper Confidence Interval 0 0.0
df.describe()
| Happiness Rank | Happiness Score | Standard Error | Economy (GDP per Capita) | Family | Health (Life Expectancy) | Freedom | Trust (Government Corruption) | Generosity | Dystopia Residual | Año | Lower Confidence Interval | Upper Confidence Interval | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 | 315.000000 |
| mean | 79.238095 | 5.378949 | 0.025161 | 0.899837 | 0.892647 | 0.594054 | 0.399896 | 0.140532 | 0.239957 | 2.212032 | 2015.498413 | 4.062160 | 5.343650 |
| std | 45.538922 | 1.141531 | 0.025851 | 0.410780 | 0.286718 | 0.240790 | 0.150684 | 0.115490 | 0.130077 | 0.558728 | 0.500793 | 1.462554 | 0.812876 |
| min | 1.000000 | 2.839000 | 0.002293 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.328580 | 2015.000000 | 2.732000 | 3.078000 |
| 25% | 40.000000 | 4.510000 | 0.002293 | 0.594900 | 0.739880 | 0.419645 | 0.295890 | 0.061315 | 0.151430 | 1.884135 | 2015.000000 | 2.849648 | 5.206201 |
| 50% | 79.000000 | 5.286000 | 0.018480 | 0.973060 | 0.937930 | 0.640450 | 0.413190 | 0.106130 | 0.218540 | 2.211260 | 2015.000000 | 2.849648 | 5.206201 |
| 75% | 118.500000 | 6.269000 | 0.043940 | 1.229000 | 1.087360 | 0.787640 | 0.516730 | 0.178610 | 0.311450 | 2.563470 | 2016.000000 | 5.231500 | 5.408500 |
| max | 158.000000 | 7.587000 | 0.136930 | 1.824270 | 1.402230 | 1.025250 | 0.669730 | 0.551910 | 0.819710 | 3.837720 | 2016.000000 | 7.460000 | 7.669000 |
# Crear un gráfico de dispersión (scatter plot) con Plotly
fig = px.scatter(df, x='Family', y='Health (Life Expectancy)', title='Relación entre Familia y Salud')
fig.update_layout(xaxis_title='Familia',
yaxis_title='Salud (Espectativa de vida)')
# Mostrar el gráfico en el Notebook
fig.show()
El gráfico sugiere una leve relación positiva entre "Familia" y "Salud (Expectativa de Vida)", pero no indica una correlación fuerte ni directa.
# Crear un gráfico de dispersión (scatter plot) con Plotly
fig = px.scatter(df, x='Happiness Score', y='Trust (Government Corruption)',
title='Relación entre la puntuación de felicidad y la confianza (corrupción del gobierno).')
fig.update_layout(xaxis_title='Puntuación de felicidad',
yaxis_title='Confianza (corrupción del gobierno)')
# Mostrar el gráfico en el Notebook
fig.show()
Los puntos están esparcidos de manera que no sugieren una relación lineal obvia. Por lo tanto, basándose solo en este gráfico, sería razonable concluir que no hay una correlación evidente entre las dos variables.
# Calcular la matriz de correlación
correlation_matrix = df.corr()
# Crear una figura para mostrar la matriz de correlación con Plotly
fig = go.Figure(data=go.Heatmap(z=correlation_matrix.values,
x=correlation_matrix.columns,
y=correlation_matrix.index,
colorscale='Viridis'))
# Personalizar el diseño del gráfico
fig.update_layout(title='Matriz de Correlación',
xaxis_title='Variables',
yaxis_title='Variables')
# Mostrar la matriz de correlación en el Notebook
fig.show()
# Crear una lista para almacenar los resultados
correlaciones_filtradas = []
# Iterar sobre las columnas de la matriz de correlación
for i in range(len(correlation_matrix.columns)):
for j in range(i+1, len(correlation_matrix.columns)): # i+1 para no duplicar pares ni incluir la diagonal
coef_correlacion = correlation_matrix.iloc[i, j]
# Filtrar las correlaciones por su valor absoluto
if abs(coef_correlacion) > 0.5:
correlaciones_filtradas.append([correlation_matrix.index[i], correlation_matrix.columns[j], coef_correlacion])
# Crear un nuevo DataFrame con los pares de correlaciones filtrados
df_correlaciones_filtradas = pd.DataFrame(correlaciones_filtradas, columns=['Variable1', 'Variable2', 'Correlacion'])
print(df_correlaciones_filtradas)
Variable1 Variable2 Correlacion 0 Happiness Rank Happiness Score -0.993905 1 Happiness Rank Economy (GDP per Capita) -0.783247 2 Happiness Rank Family -0.686502 3 Happiness Rank Health (Life Expectancy) -0.741182 4 Happiness Rank Freedom -0.545570 5 Happiness Rank Dystopia Residual -0.522146 6 Happiness Rank Upper Confidence Interval -0.691347 7 Happiness Score Economy (GDP per Capita) 0.779171 8 Happiness Score Family 0.693547 9 Happiness Score Health (Life Expectancy) 0.734491 10 Happiness Score Freedom 0.556414 11 Happiness Score Dystopia Residual 0.526343 12 Happiness Score Upper Confidence Interval 0.694806 13 Standard Error Año -0.883201 14 Standard Error Lower Confidence Interval -0.735704 15 Economy (GDP per Capita) Family 0.566283 16 Economy (GDP per Capita) Health (Life Expectancy) 0.789103 17 Economy (GDP per Capita) Upper Confidence Interval 0.572879 18 Family Health (Life Expectancy) 0.569937 19 Año Lower Confidence Interval 0.832997 20 Lower Confidence Interval Upper Confidence Interval 0.685624
La matriz de correlación revela patrones interesantes y significativos en las relaciones entre diversas variables relacionadas con la felicidad; por ejemplo, hay una correlación negativa casi perfecta entre el 'Happiness Rank' y el 'Happiness Score', lo que sugiere que cuanto más bajo es el rango, mayor es la felicidad. Además, factores clave como la economía, la salud, las relaciones familiares y la libertad personal muestran fuertes correlaciones positivas con la puntuación de felicidad, lo que indica su papel fundamental en el bienestar de las personas. Estos hallazgos destacan la importancia de un enfoque multifacético para entender y mejorar la felicidad, y sugieren áreas potenciales de enfoque para políticas y programas destinados a aumentar el bienestar general.
#Agrupar el DataFrame por país y obtener el máximo de felicidad
df_agrupado = df.groupby('Country', as_index=False)['Happiness Score'].max()
# Mostrar el DataFrame agrupado
print(df_agrupado )
Country Happiness Score 0 Afghanistan 3.575 1 Albania 4.959 2 Algeria 6.355 3 Angola 4.033 4 Argentina 6.650 .. ... ... 159 Venezuela 6.810 160 Vietnam 5.360 161 Yemen 4.077 162 Zambia 5.129 163 Zimbabwe 4.610 [164 rows x 2 columns]
# Combinar el DataFrame original con el DataFrame agrupado para obtener todas las demás columnas
df_resultado = pd.merge(df, df_agrupado, on=['Country', 'Happiness Score'], how='inner')
# Mostrar el DataFrame completo resultado
print(df_resultado)
Country Region Happiness Rank \
0 Switzerland Western Europe 1
1 Iceland Western Europe 2
2 Denmark Western Europe 3
3 Norway Western Europe 4
4 Canada North America 5
.. ... ... ...
164 Madagascar Sub-Saharan Africa 148
165 Rwanda Sub-Saharan Africa 152
166 Benin Sub-Saharan Africa 153
167 Togo Sub-Saharan Africa 155
168 Syria Middle East and Northern Africa 156
Happiness Score Standard Error Economy (GDP per Capita) Family \
0 7.587 0.034110 1.39651 1.34951
1 7.561 0.048840 1.30232 1.40223
2 7.527 0.033280 1.32548 1.36058
3 7.522 0.038800 1.45900 1.33095
4 7.427 0.035530 1.32629 1.32261
.. ... ... ... ...
164 3.695 0.002293 0.27954 0.46115
165 3.515 0.002293 0.32846 0.61586
166 3.484 0.002293 0.39499 0.10419
167 3.303 0.002293 0.28123 0.00000
168 3.069 0.002293 0.74719 0.14866
Health (Life Expectancy) Freedom Trust (Government Corruption) \
0 0.94143 0.66557 0.41978
1 0.94784 0.62877 0.14145
2 0.87464 0.64938 0.48357
3 0.88521 0.66973 0.36503
4 0.90563 0.63297 0.32957
.. ... ... ...
164 0.37109 0.13684 0.07506
165 0.31865 0.54320 0.50521
166 0.21028 0.39747 0.06681
167 0.24811 0.34678 0.11587
168 0.62994 0.06912 0.17233
Generosity Dystopia Residual Año Lower Confidence Interval \
0 0.29678 2.51738 2015 2.849648
1 0.43630 2.70201 2015 2.849648
2 0.34139 2.49204 2015 2.849648
3 0.34699 2.46531 2015 2.849648
4 0.45811 2.45176 2015 2.849648
.. ... ... ... ...
164 0.22040 2.15075 2016 3.621000
165 0.23552 0.96819 2016 3.444000
166 0.20180 2.10812 2016 3.404000
167 0.17517 2.13540 2016 3.192000
168 0.48397 0.81789 2016 2.936000
Upper Confidence Interval
0 5.206201
1 5.206201
2 5.206201
3 5.206201
4 5.206201
.. ...
164 3.769000
165 3.586000
166 3.564000
167 3.414000
168 3.202000
[169 rows x 15 columns]
df_agrupado.describe()
| Happiness Score | |
|---|---|
| count | 164.000000 |
| mean | 5.437366 |
| std | 1.120456 |
| min | 2.905000 |
| 25% | 4.569500 |
| 50% | 5.297000 |
| 75% | 6.302250 |
| max | 7.587000 |
df_resultado.describe()
| Happiness Rank | Happiness Score | Standard Error | Economy (GDP per Capita) | Family | Health (Life Expectancy) | Freedom | Trust (Government Corruption) | Generosity | Dystopia Residual | Año | Lower Confidence Interval | Upper Confidence Interval | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| count | 169.000000 | 169.000000 | 169.000000 | 169.000000 | 169.000000 | 169.000000 | 169.000000 | 169.000000 | 169.000000 | 169.000000 | 169.000000 | 169.000000 | 169.000000 |
| mean | 77.769231 | 5.419538 | 0.026614 | 0.877757 | 0.886365 | 0.578561 | 0.399952 | 0.144118 | 0.240555 | 2.292228 | 2015.491124 | 3.981720 | 5.281942 |
| std | 45.007407 | 1.130550 | 0.028097 | 0.419272 | 0.296667 | 0.248018 | 0.154398 | 0.116709 | 0.131641 | 0.531190 | 0.501407 | 1.373518 | 0.742458 |
| min | 1.000000 | 2.905000 | 0.002293 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.654290 | 2015.000000 | 2.732000 | 3.078000 |
| 25% | 40.000000 | 4.565000 | 0.002293 | 0.545580 | 0.716290 | 0.388470 | 0.280980 | 0.064130 | 0.150110 | 1.974780 | 2015.000000 | 2.849648 | 5.206201 |
| 50% | 78.000000 | 5.291000 | 0.020430 | 0.974380 | 0.916120 | 0.623660 | 0.413190 | 0.110230 | 0.219000 | 2.273500 | 2015.000000 | 2.849648 | 5.206201 |
| 75% | 116.000000 | 6.269000 | 0.044540 | 1.241420 | 1.097740 | 0.763760 | 0.522340 | 0.180370 | 0.311050 | 2.591150 | 2016.000000 | 5.063000 | 5.271000 |
| max | 157.000000 | 7.587000 | 0.136930 | 1.690420 | 1.402230 | 1.025250 | 0.669730 | 0.522080 | 0.819710 | 3.837720 | 2016.000000 | 7.351000 | 7.475000 |
# Crear un gráfico de dispersión (scatter plot) con Plotly para la relación entre felicidad y generosidad
fig = px.scatter(df, x='Generosity', y='Happiness Score', color='Freedom',
title='Relación entre Felicidad, Generosidad y Libertad')
# Personalizar el diseño del gráfico
fig.update_layout(xaxis_title='Generosidad',
yaxis_title='Puntuación de Felicidad')
# Mostrar el gráfico
fig.show()
El gráfico sugiere que la libertad podría tener un papel más significativo en la felicidad que la generosidad, dada la presencia de colores que indican niveles más altos de libertad en las regiones con puntuaciones de felicidad superiores, aunque la relación entre generosidad y felicidad no es claramente definida.
# Crear un gráfico de barras con Plotly para la distribución del grado de distopía por región
fig = px.bar(df, x='Region', y='Dystopia Residual', title='Distribución del Grado de Distopía por Región')
# Personalizar el diseño del gráfico
fig.update_layout(xaxis_title='Región',
yaxis_title='Grado de Distopía')
# Mostrar el gráfico en el Notebook
fig.show()
Las regiones de Europa Occidental y África Subsahariana muestran los grados más altos de distopía, mientras que América del Norte y Asia Meridional tienen los niveles más bajos en comparación. Esto puede indicar diferencias significativas en la percepción o existencia de condiciones distópicas entre estas regiones.
# Crear un gráfico de caja y bigotes (box plot) con Plotly para la distribución del grado de distopía por región
fig = px.box(df, x='Region', y='Dystopia Residual', title='Distribución del Grado de Distopía por Región')
# Personalizar el diseño del gráfico
fig.update_layout(xaxis_title='Región',
yaxis_title='Grado de Distopía')
# Mostrar el gráfico en el Notebook
fig.show()
El gráfico muestra un diagrama de caja de la distribución del grado de distopía por región. Las líneas centrales de las cajas representan la mediana de los datos de cada región. La variabilidad del grado de distopía se indica a través del rango intercuartílico (la altura de las cajas), y los puntos por encima o debajo de las "bigotes" (líneas verticales) sugieren valores atípicos. Las regiones parecen tener medianas similares con variaciones en la dispersión y en los valores atípicos, lo que indica diferencias en la consistencia del grado de distopía entre regiones.
Los datos analizados sugieren que factores como la libertad y la economía tienen una influencia notable en la felicidad de las personas, mientras que la generosidad parece tener un efecto menos directo. Además, la percepción del grado de distopía es similar en distintas regiones, aunque con variabilidad notable en algunas de ellas. Esto refleja la complejidad de las cuestiones sociales y cómo se perciben en diferentes contextos geográficos y culturales.
Es crucial para los responsables de la formulación de políticas y programas de desarrollo centrarse en mejorar la libertad y las condiciones económicas para potenciar la felicidad. Al mismo tiempo, deberían considerar las diferencias regionales en la percepción de la distopía al aplicar estrategias de mejora, asegurando que las medidas sean relevantes y efectivas para cada contexto específico.